
// 常见用法示例：

import { error } from "console";




// 1、指定返回值类型

function getUserName(userId: number): Promise<string>{
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve('John Doe')
        }, 1000);
    })
}

getUserName(1).then(userName => {
    console.log('用户名是：',userName);// 用户名是： John Doe
     // TypeScript 知道 `userName` 是 `string`
})



// 处理多个 Promise
// 如果你有一个函数返回多个Promise的结果，可以使用Promise.all来处理它们

function fetchUser():Promise<string> {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve('user')
        }, 1000);
    })
}

function fetchOrders():Promise<number[]> {
    return new Promise((resolve, reject) => {
        resolve([1,2,3])
    })
}

Promise.all([fetchUser(), fetchOrders()])
    .then(([user, orders]) => {
    console.log(`用户：${user},订单：${orders}`);// 用户：user,订单：1,2,3
    
    })


// 3、处理Promise错误
// 使用catch来处理Promise错误
    
function riskyOperation():Promise<number> {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            reject(new Error('出错了'))
        }, 1000);
    })
}

riskyOperation()
    .then(result => {
    console.log(result);
    
    })
    .catch(error => {
    console.error('错误信息：',error.message); // 错误信息： 出错了
    
    })


// 4、自定义Promise类型
// 你可以定义一个返回Promise的函数，其Promisr解决的值是一个复杂的类型
interface User{
    id: number
    name:string
}
    
function getUserById(userId:number):Promise<User> {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve({id:userId,name:'John Doe'})
        }, 1000);
    })
}

getUserById(1).then(res => {
    console.log(`用户ID：${res.id},用户名：${res.name}`); // 用户ID：1,用户名：John Doe
    
})

